利用pandas读写HDF5文件 |
您所在的位置:网站首页 › h5py 读取 › 利用pandas读写HDF5文件 |
一、简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式,文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一个HDF5可以看做一个高度整合的文件夹,其内部可存放不同类型的数据。在Python中操纵HDF5文件的方式主要有两种,一是利用pandas中内建的一系列HDF5文件操作相关的方法来将pandas中的数据结构保存在HDF5文件中,二是利用h5py模块来完成从Python原生数据结构向HDF5格式的保存,本文就将针对pandas中读写HDF5文件的方法进行介绍。 二、利用pandas操纵HDF5文件 2.1 写出 pandas中的HDFStore()用于生成管理HDF5文件IO操作的对象,其主要参数如下: path:字符型输入,用于指定h5文件的名称(不在当前工作目录时需要带上完整路径信息) mode:用于指定IO操作的模式,与Python内建的open()中的参数一致,默认为’a’,即当指定文件已存在时不影响原有数据写入,指定文件不存在时则新建文件;‘r’,只读模式;‘w’,创建新文件(会覆盖同名旧文件);‘r+’,与’a’作用相似,但要求文件必须已经存在; complevel:int型,用于控制h5文件的压缩水平,取值范围在0-9之间,越大则文件的压缩程度越大,占用的空间越小,但相对应的在读取文件时需要付出更多解压缩的时间成本,默认为0,代表不压缩 下面我们创建一个HDF5 IO对象store: import pandas as pd store = pd.HDFStore('demo.h5') '''查看store类型''' print(store)可以看到store对象属于pandas的io类,通过上面的语句我们已经成功的初始化名为demo.h5的的文件,本地也相应的出现了如下的文件:
第二种方式利用store对象的put()方法,其主要参数如下: key:指定h5文件中待写入数据的key value:指定与key对应的待写入的数据 format:字符型输入,用于指定写出的模式,'fixed’对应的模式速度快,但是不支持追加也不支持检索;'table’对应的模式以表格的模式写出,速度稍慢,但是支持直接通过store对象进行追加和表格查询操作 使用put()方法将数据存入store对象中: store.put(key='s',value=s);store.put(key='df',value=df)既然是键值对的格式,那么可以查看store的items属性(注意这里store对象只有items和keys属性,没有values属性): store.items
二是使用Python中的关键词del来删除指定数据: del store['s'] print(store.keys())打印出的结果都如下:
二是使用Python中的关键词del来删除指定数据: del store['s'] print(store.keys())打印出的结果都如下:
2.2 读入 在pandas中读入HDF5文件的方式主要有两种,一是通过上一节中类似的方式创建与本地h5文件连接的IO对象,接着使用键索引或者store对象的get()方法传入要提取数据的key来读入指定数据: store = pd.HDFStore('demo.h5') '''方式1''' df1 = store['df'] '''方式2''' df2 = store.get('df') df1 == df2
第二种读入h5格式文件中数据的方法是pandas中的read_hdf(),其主要参数如下: path_or_buf:传入指定h5文件的名称 key:要提取数据的键 需要注意的是利用read_hdf()读取h5文件时对应文件不可以同时存在其他未关闭的IO对象,否则会报错,如下例: print(store.is_open) df = pd.read_hdf('demo.h5',key='df')
这一小节我们来测试一下对于存储同样数据的csv格式文件、h5格式的文件,在读取速度上的差异情况: 这里我们首先创建一个非常大的数据框,由一亿行x5列浮点类型的标准正态分布随机数组成,接着分别用pandas中写出HDF5和csv格式文件的方式持久化存储: import pandas as pd import numpy as np import time store = pd.HDFStore('store.h5') #生成一个1亿行,5列的标准正态分布随机数表 df = pd.DataFrame(np.random.rand(100000000,5)) start1 = time.clock() store['df'] = df store.close() print(f'HDF5存储用时{time.clock()-start1}秒') start2 = time.clock() df.to_csv('df.csv',index=False) print(f'csv存储用时{time.clock()-start2}秒')
以上就是本文的全部内容,如有笔误望指出! https://www.cnblogs.com/feffery/p/11135082.html |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |